/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package otcapp.experto;

import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import otcapp.entidades.Personal;
import otcapp.experto.excepciones.ExpertoConsultarPersonalException;
import persistencia.Fachada;

/**
 *
 * @author diego
 */
public class ExpertoConsultarPersonal extends Experto {

    public enum TipoPersonal {

        ADMINISTRATIVO, PSICOLOGO, TRABAJADOR_SOCIAL
    }

    public List buscarPersonal(TipoPersonal tipo) throws ExpertoConsultarPersonalException {
        String nombreTipo;
        switch (tipo) {
            case ADMINISTRATIVO:
                nombreTipo = "Administrativo";
                break;
            case PSICOLOGO:
                nombreTipo = "Psicólogo";
                break;
            case TRABAJADOR_SOCIAL:
                nombreTipo = "Trabajador Social";
                break;
            default:
                nombreTipo = "";
        }
        Criteria tipoPersonal = Fachada.getInstancia().crearCriterio(Personal.class).createCriteria("tipoPersonal").add(Restrictions.eq("nombreTipo", nombreTipo));
        List listadoFachada = Fachada.getInstancia().buscar(Personal.class, tipoPersonal);
        if (listadoFachada.isEmpty()) {
            throw new ExpertoConsultarPersonalException("No hay personal registrado");
        }
        return listadoFachada;
    }

    public List buscarPersonalALL() throws ExpertoConsultarPersonalException {
        Criteria ordenar = Fachada.getInstancia().crearCriterio(Personal.class).addOrder(Order.asc("apellido"));
        List listadoFachada = Fachada.getInstancia().buscar(Personal.class, ordenar);
        if (listadoFachada.isEmpty()) {
            throw new ExpertoConsultarPersonalException("No hay personal registrado");
        }
        return listadoFachada;
    }

    public Personal buscarPersonalID(Long id) throws ExpertoConsultarPersonalException {
        Criteria criteriID = Fachada.getInstancia().crearCriterio(Personal.class).add(Restrictions.eq("id", id));
        List listadoFachada = Fachada.getInstancia().buscar(Personal.class, criteriID);
        if (listadoFachada.isEmpty()) {
            throw new ExpertoConsultarPersonalException("No hay personal resgistrado con ID: " + id);
        }
        return (Personal) listadoFachada.get(0);
    }

    public Personal buscarPersonalLegajo(String legajo) throws ExpertoConsultarPersonalException {
        Criteria criterioLegajo = Fachada.getInstancia().crearCriterio(Personal.class).add(Restrictions.eq("legajo", legajo));
        List listadoFachada = Fachada.getInstancia().buscar(Personal.class, criterioLegajo);
        if (listadoFachada.isEmpty()) {
            throw new ExpertoConsultarPersonalException("No hay personal resgistrado con legajo:" + legajo);
        }
        return (Personal) listadoFachada.get(0);
    }
}
